
import axios from 'axios'
import { ElNotification } from 'element-plus'
import { getToken } from '~/composables/auth'
import { toast } from '~/composables/util'
import {router} from '~/router/index'
import store from './store'
import qs from 'qs'



const service = axios.create({
    // baseURL: '/proxy',
    // 生产环境
    // baseURL: 'https://services.highlander.com.cn',
    // 测试环境
    // baseURL: 'https://task.ikyasong.com',
    // 本地环境
    // baseURL: 'http://localhost:8888',
    baseURL: `${window.location.origin}`,
    timeout: 30000,
    // headers: { 'X-Custom-Header': 'foobar' }
});

service.defaults.paramsSerializer = function(params) {
  return qs.stringify(params, {arrayFormat: 'repeat', allowDots: true})
};

// 添加请求拦截器
service.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // header设置cookie
    const token = getToken()
    // const token = "pQv8z1/T4BjdXnthI+lb5DvgSEowGtNrJT/8FZ76vVMD4Giv9VQVKB=="
    if (token) {
        config.headers["token"] = token
    }

    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
service.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // console.log('resp: ', response.data)
    if (response.data.code != '200') {
      // store.dispatch("logout")
      // .finally(() => {
      //   location.reload()
      // })

      //如果登录超时，则跳转登录界面
      if (response.data.code == '403' || response.data.code == '401') {
        toast(response.data.msg, 'error')
        // 清除缓存信息 并且 跳转到登录界面
        store.dispatch('logout').then(() => {
          router.push("/login")
        })
        return
      }

      toast(response.data.msg, 'error')
      return Promise.reject(response.data?.msg || '请求错误')
    }
    return response.data.data;
  }, function (error) {
    // 非 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log('请求非200', error)
    const msg = error.response?.data?.msg || '请求失败'
    toast(msg, 'error')
    return Promise.reject(error);
  });
export default service;